using System;

namespace ActivUFRJ.Classes.Geral
{
    public class DBMensagem : Connection.MySQL
    {
        public DBMensagem() : base(ref Connection.DBConnection.myConnection)
        {

        }

        private void FillMensagem(Mensagem mensagem)
        {
            mensagem.ID = Convert.ToInt32(TableGetValue("MSG_id"));
            mensagem.DataEnvio = Convert.ToDateTime(TableGetValue("MSG_DATA_ENVIO"));
            mensagem.Assunto = Convert.ToString(TableGetValue("MSG_ASSUNTO"));
            mensagem.Texto = Convert.ToString(TableGetValue("MSG_TEXTO"));
            mensagem.Destinatario = new ActivUFRJ.Classes.Usuario.Usuario(Convert.ToInt32(TableGetValue("USR_ID_DESTINATARIO")));
            mensagem.Remetente = new ActivUFRJ.Classes.Usuario.Usuario(Convert.ToInt32(TableGetValue("USR_ID_REMETENTE")));
            mensagem.Status = (StatusMensagem)Convert.ToInt32(TableGetValue("SM_ID"));
        }


        internal bool CarregarMensagem(Mensagem mensagem)
        {
            try
            {
                string SQL =    " SELECT * from MENSAGENS where MSG_ID = " + mensagem.ID;

                this.SetSQL(SQL);
                if (!this.IsTableOver())
                {
                    FillMensagem(mensagem);
                    return true;
                }
                else return false;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        internal System.Data.DataTable GetListaMensagensCaixaEntrada(ActivUFRJ.Classes.Usuario.Usuario usuario)
        {
            try
            {
                /*
                string SQL =    "SELECT MSG_ID as \"MensagemID\", concat(USR_NOME, \" \", USR_SOBRENOME) as \"De:\", MSG_ASSUNTO as \"Assunto:\", MSG_DATA_ENVIO as \"Data Envio:\"" +
                                " FROM mensagens " + 
                                " inner join USUARIOS " +
                                " on mensagens.usr_id_destinatario = usuarios.usr_id " +
                                " where mensagens.usr_id_remetente = " + usuario.ID.ToString();
                 */

                string SQL = "SELECT concat(USR_NOME, \" \", USR_SOBRENOME) as \"De:\", MSG_ASSUNTO as \"Assunto:\", MSG_DATA_ENVIO as \"Data Envio:\"" +
                                " FROM mensagens " +
                                " inner join USUARIOS " +
                                " on mensagens.usr_id_destinatario = usuarios.usr_id " +
                                " where mensagens.usr_id_destinatario = " + usuario.ID.ToString();

                this.SetSQL(SQL);
                return this.ReturnTable();
            }
            catch (Exception ex)
            {
                return null;
            }
        }


        internal object GetListaMensagensCaixaSaida(ActivUFRJ.Classes.Usuario.Usuario usuario)
        {
            try
            {
                string SQL = "SELECT concat(USR_NOME, \" \", USR_SOBRENOME) as \"Para:\", MSG_ASSUNTO as \"Assunto:\", MSG_DATA_ENVIO as \"Data Envio:\"" +
                                " FROM mensagens " +
                                " inner join USUARIOS " +
                                " on mensagens.usr_id_destinatario = usuarios.usr_id " +
                                " where mensagens.usr_id_remetente = " + usuario.ID.ToString();

                this.SetSQL(SQL);
                return this.ReturnTable();
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        internal bool Enviar(Mensagem mensagem)
        {
            try
            {
                string sql = "INSERT into MENSAGENS (MSG_ASSUNTO, USR_ID_REMETENTE, USR_ID_DESTINATARIO, MSG_TEXTO, SM_ID, MSG_DATA_ENVIO) " +
                                " VALUES " +
                            "('" +
                                mensagem.Assunto.Replace("'", "''") + "', " + mensagem.Remetente.ID.ToString() + ", " + mensagem.Destinatario.ID.ToString() + ", '" +
                                mensagem.Texto.Replace("'", "''") + "', " + ((int)(StatusMensagem.Nova)).ToString() + ", '" + System.DateTime.Now.ToString("s") +
                            "')";


                bool enviado = this.ExecuteNonQuery(sql);
                this.Dispose();

                return enviado;

            }
            catch (Exception ex)
            {
                return false;
            }
        }
    }
}
